package inner;

class OutClass{
    public int data1 = 1;
    int data2;
    public static int data3;

    /*实例内部类、非静态内部类
     * 1.如何获取 实例类内部的对象？-- 需要外部类的引用
     * OutClass.InnerClass innerClass = outClass.new InnerClass();
     * 2.实例内部类中 不能有静态的成员变量--非要定义，只能是 static final 来修饰
     * 3.在实例内部类中，如何访问外部类当中的相同的成员变量
     *      在实例内部类当中 获取外部类的this：OutClass.this.data1
     * */
    class InnerClass{
        public int data1 = 111;
        public int data4 = 4;
        int data5 = 5;
        //public static int data6;  error
        public static final int data6 = 6;

        public void func(){
            System.out.println("InnerClass::test()");
            System.out.println(data1); //有两个data1采取就近原则
            System.out.println(OutClass.this.data1);
            System.out.println(data2);
            System.out.println(data3);
            System.out.println(data4);
            System.out.println(data5);
            System.out.println(data6);
        }
    }

    public void test(){
        System.out.println("OutClass::test()");
//        static final int c = 0; error
        final int SIZE = 10; //final表示常量--大写--常量在程序编译时候确定的，一但初始化就不能修改
//        SIZE = 20; error--不能修改
    }


}

public class Test {
    public static void main(String[] args) {

        OutClass outClass = new OutClass();
        System.out.println(outClass.data1);

        //需要外部类的引用                   外部类引用
        OutClass.InnerClass innerClass = outClass.new InnerClass();
        innerClass.func();
    }
}
